#ifndef ISTATUSUPDATESTRATEGY_H
#define ISTATUSUPDATESTRATEGY_H

#include "statusbarstate.h"

/**
 * IStatusUpdateStrategy - 状态更新策略接口
 *
 * Martin Fowler重构：Strategy Pattern
 * 定义状态更新行为的家族算法，使不同的更新策略可以互换使用
 *
 * 该接口允许在运行时切换不同的状态更新策略：
 * - 立即更新策略：状态变化立即反映到UI
 * - 批量更新策略：收集状态变化批量应用
 * - 防抖动更新策略：短时间内的频繁更新进行去重
 * - 性能优化更新策略：只更新变化的部分
 */
class IStatusUpdateStrategy
{
public:
    virtual ~IStatusUpdateStrategy() = default;

    /**
     * 应用状态更新
     * @param newState 新状态
     * @param oldState 旧状态
     * @param context 更新上下文（可能包含UI组件引用等）
     */
    virtual void applyUpdate(const StatusBarState& newState,
                           const StatusBarState& oldState,
                           void* context = nullptr) = 0;

    /**
     * 策略名称（用于调试和日志）
     */
    virtual QString strategyName() const = 0;

    /**
     * 策略是否支持批量更新
     */
    virtual bool supportsBatchUpdate() const { return false; }

    /**
     * 刷新挂起的更新（用于批量更新策略）
     */
    virtual void flushPendingUpdates() {}

    /**
     * 重置策略状态
     */
    virtual void reset() {}
};

#endif // ISTATUSUPDATESTRATEGY_H